package jar;


import java.util.ArrayList;
import java.util.List;

public class MesaDeJuego {
	
	private static final double PORCENTAJE_A_CAMBIAR_POR_FICHAS = 0.8;
	
	private List<Jugador> jugadores = new ArrayList<Jugador>();
	private List<Apuesta> apuestas = new ArrayList<Apuesta>();
	
	private int pozo = 1000000;
	private int banca = 10000;
	
	private int maximoJugadores = 20;
	
	/*private int result = 0;
	
	public int getResult(){
		return result;
	}*/
	
	/*se puede suponer una banca ilimitada para que no se tenga que agregar ExceptionLimiteBancaSuperado*/
	
	public void descontarFichas(int cantFichas)throws ExceptionLimiteBancaSuperado{
		if(banca>=cantFichas){
			banca-=cantFichas;
		}
		else{
			throw new ExceptionLimiteBancaSuperado();
		}
	}
	
	public void girarRuleta() throws ExceptionLimiteBancaSuperado{
		int casilla = (int) (Math.random() * 37);
		//result = casilla;
		buscarGanadores(casilla);		
	}
	
	public void buscarGanadores(int numero) throws ExceptionLimiteBancaSuperado {
		for(Apuesta apuesta : apuestas) {
			apuesta.evaluar(numero, this);
		}
	}
	
	public void unirJugador(Jugador unJugador) throws ExceptionMaximoJugadores {
		this.unirJugador(unJugador, (int) (unJugador.getDinero() * PORCENTAJE_A_CAMBIAR_POR_FICHAS));
	}
	
	protected void unirJugador(Jugador unJugador, int dineroXFichas) throws ExceptionMaximoJugadores{
		if(jugadores.size()<maximoJugadores){
			unJugador.setFichas(dineroXFichas);
			jugadores.add(unJugador);			
		}
		else{
			throw new ExceptionMaximoJugadores();
		}

	}
	
	public void apostarPleno(Jugador unJugador, int numeroJugado, int cantFichas) throws ExceptionNoPuedeApostar {
		this.apostar(unJugador, cantFichas, new Pleno(unJugador, numeroJugado, cantFichas));
	}

	public void apostarParImpar(Jugador unJugador, int numeroJugado, int cantFichas) throws ExceptionNoPuedeApostar {
		this.apostar(unJugador, cantFichas, new ParImpar(unJugador,cantFichas));
	}
	
	public void apostarFila(Jugador unJugador, int numeroJugado, int cantFichas) throws ExceptionNoPuedeApostar{
		this.apostar(unJugador, cantFichas, new Fila(unJugador, numeroJugado, cantFichas));
	}
	
	public void apostarColumna(Jugador unJugador, int numeroJugado, int cantFichas) throws ExceptionNoPuedeApostar{
		this.apostar(unJugador, cantFichas, new Columna(unJugador, numeroJugado, cantFichas));
	}
	
	protected void apostar(Jugador unJugador, int cantFichas, Apuesta apuesta) throws ExceptionNoPuedeApostar {
		unJugador.debitarFichas(cantFichas);
		this.apuestas.add(apuesta);
	}

	public void cobrarte(int fichasApostadas) {
		banca += fichasApostadas;
	}
		
}
	
	
	/*
	public static void main(String  args []){
		MesaDeJuego mesaJuego = new MesaDeJuego();
		Jugador jugador1 = new Jugador("jugador1",1000);
		Jugador jugador2=  new Jugador("jugador2",1000);
		Jugador jugador3 = new Jugador("jugador3",1000);
		Jugador jugador4=  new Jugador("jugador4",1000);
		mesaJuego.apostarPleno(jugador1, 6, 10);
		mesaJuego.apostarParImpar(jugador2, 20, 10);
		mesaJuego.apostarFila(jugador3, 16, 10);//16 17 18
		mesaJuego.apostarColumna(jugador4, 8, 10);// 2 5 8 11 14 17 20 23 26 29 32 35		
		mesaJuego.girarRuleta();
		System.out.println( mesaJuego.getResult() + " " + jugador1.getFichas() + " " + jugador2.getFichas()+ " " + jugador3.getFichas()+ " " + jugador4.getFichas());
	}*/
		

